import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

class Solution {
    public int lenLongestFibSubseq(int[] arr) {
        int n = arr.length;
        int[][] dp = new int[n][n];
        Map<Integer, Integer> map = new HashMap<>();
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                dp[i][j] = 2;
            }
            map.put(arr[i], i);
        }
        dp[0][0] = 1;
        int ret = 2;
        for(int i = 1; i < n; i++){
            int j = 0;
            for(; j < i; j++){
                if(map.containsKey(arr[i] - arr[j])){
                    int k = map.get(arr[i] - arr[j]);
                    if(k < j){
                        dp[i][j] = dp[j][k] + 1;
                    }
                }
                ret = Math.max(ret, dp[i][j]);
            }
        }
        return ret < 3 ? 0 : ret;
    }
}